package Stack;

// 顺序栈
public class SqStack implements IStack {
    // 顺序栈的存储空间
    private Object[] stackElem;
    // 指向栈顶元素的下一个存储单元位置
    private int top;
    // 栈的最大存储单元个数
    private int maxSize;

    // 构造最大存储单元为maxsize的空栈
    public SqStack(int maxSize){
        top = 0;
        this.maxSize = maxSize;
        stackElem = new Object[maxSize];
    }

    // 将栈置为空
    public void clear() {
        top = 0;
    }

    // 判断栈是否为空
    public boolean isEmpty() {
        return top == 0;
    }

    // 返回栈的长度
    public int length() {
        return top;
    }

    // 返回栈顶元素
    public Object peek() {
        if(isEmpty()){
            return null;
        }else {
            return stackElem[top-1];
        }
    }

    // 入栈
    public void push(Object x) throws Exception {
        // 判断是否最大值
        if(top==maxSize){
            throw new Exception("栈已经满了");
        }else{
            stackElem[top] = x;
            top++;
        }
    }

    // 出栈
    public Object pop(){
        // 栈内没有任何元素
        if(top==0) {
            return null;
        }else{
            // i--  先自减 返回自减前的数
            top--;
            return stackElem[top];
        }
    }

    // 输出栈中所有数据元素
    public void display() {
        for(int i=top-1; i>=0; i--){
            System.out.println(stackElem[i] + " ");
        }
    }
}
